#ifndef _DISP_MANAGER_H
#define _DISP_MANAGER_H

#ifndef NULL
#define NULL	(void*)0
#endif

//创建一个对象用于确定显示区域的大小
typedef struct DispBuff{
	int X_locat;
	int Y_locat;
	int iBpp;
	char *buff;
}DispBuff, *PDispBuff;

//创建一个对象用于确定显示刷新区域
typedef struct DispRegion{
	int iLeftUpX;
	int iLeftUpY;
	int iWidth;
	int iHeigh;
}DispRegion, *PDispRegion;

//创建一个对象用于确定整个显示界面，里面有要使用什么设备进行显示
//有要获得整个界面需要得到多少内存的函数，有将界面刷上硬件设备上面的函数
//同时为了将这些结构体链接起来统一管理，还需要指针。
typedef struct DispOpr{
	char *name;
	int (*DeviceInit)(void);
	int (*DeviceExit)(void);
	int (*GetBuffer)(PDispBuff ptDispBuff);//获取显示Buff并将信息存放在DispBuff结构体中
	int (*FlushRegion)(PDispRegion ptDispRegion,PDispBuff ptDispBuff);//将显示信息刷新到设备上面
	struct DispOpr *next;//支持不同的输出设备，每个设备都有这样一个结构体对象
}DispOpr, *PDispOpr;

void RegisterDisplay(PDispOpr ptDispOpr);

void DisplayInit(void);
int SelectDefaultDisplay(char *name);
int InitDefaultDisplay(void);
int PutPixel(int x, int y, unsigned int dwColor);
int FlushDisplayRegion(PDispRegion ptRegion, PDispBuff ptDispBuff);
PDispBuff GetDisplayBuffer(void);

#endif
